package dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import connection.JDCConnection;

import model.Resultat;
import model.Session;

public class HistoriqueDAO {
	public ArrayList<Resultat> getCoursBySession(JDCConnection connection ,int idEtudiant, int idSession) {
	
		Statement stmt;
		ResultSet rs;
		ArrayList<Resultat> list = new ArrayList<Resultat>();
		

		try {

			stmt = connection.createStatement();
			rs = stmt.executeQuery("SELECT note, sigle, nbCredit FROM Historique,Cours where idEtudiant="+idEtudiant +" AND idSession= "+idSession +" AND Cours.idCours=Historique.idCours");
			while (rs.next()) {
				Resultat resultat = new Resultat();
				
				resultat.setNote(rs.getString("note"));
				resultat.setSigle(rs.getString("sigle"));
				resultat.setNbCredit(rs.getInt("nbCredit"))	;
				//ajout a la liste
				list.add(resultat);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return list;
	}
	public ArrayList<Session> getResultatByIdEtudiant(JDCConnection connection ,int idEtudiant) {
		
		Statement stmt;
		ResultSet rs;
		ArrayList<Session> list = new ArrayList<Session>();
		

		try {

			stmt = connection.createStatement();
			rs = stmt.executeQuery("SELECT Distinct Historique.idEtudiant,Historique.idSession,nomSession FROM Historique,Cours,Session where Historique.idEtudiant="+idEtudiant +" AND Cours.idCours=Historique.idCours AND Session.idSession=Historique.idSession");
			while (rs.next()) {
				//Resultat resultat = new Resultat();
				Session session = new Session();
				
				session.setIdEtudiant(rs.getInt("idEtudiant"));
				session.setNomSession(rs.getString("nomSession"));
				session.setResultats(getCoursBySession(connection,idEtudiant,rs.getInt("idSession")));
				session.setMoyenne(calculeMoyenne(session.getResultats()));
				
				//ajout a la liste
				list.add(session);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return list;
	}
	
	public double getMoyenneCumulative(JDCConnection connection ,int idEtudiant){
		Statement stmt;
		ResultSet rs;
		ArrayList<Resultat> list = new ArrayList<Resultat>();
		double moynneCummulative=0;

		try {

			stmt = connection.createStatement();
			rs = stmt.executeQuery("select note from Historique where idEtudiant="+idEtudiant);
			while (rs.next()) {
				Resultat resultat = new Resultat();
				
				
				resultat.setNote(rs.getString("note"));
				list.add(resultat);	
			}
			moynneCummulative=calculeMoyenne(list);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return moynneCummulative ;	
	}
	private double calculeMoyenne(ArrayList<Resultat> listResultat){
		double moyenne = 0;
		String note;
		for(int i=0;i<listResultat.size();i++){
		note=listResultat.get(i).getNote();
		
			if (note.contains("A+")){
				moyenne = moyenne + 4.3;
			}
			else if (note.contains("A")){
				moyenne = moyenne + 4.2;
			}
			else if (note.contains("A-")){
				moyenne = moyenne + 4.1;
			}
			else if (note.contains("B+")){
				moyenne = moyenne + 3.7;
			}
			else if (note.contains("B")){
				moyenne = moyenne + 3.5;
			}
			else if (note.contains("B-")){
				moyenne = moyenne + 3.3;
			}
			else if (note.contains("C+")){
				moyenne = moyenne + 3.2;
			}
			else if(note.contains("C")){
				moyenne = moyenne + 3.0;
			}
			else if (note.contains("C-")){
				moyenne = moyenne + 2.9;
			}
			else if (note.contains("D+")){
				moyenne = moyenne + 2.8;
			}
			else if (note.contains("D")){
				moyenne = moyenne + 2.6;
			}
			else if (note.contains("D-")){
				moyenne = moyenne + 2.6;
			}
			
		}
		moyenne= Math.floor(moyenne/listResultat.size()*100)/100;
		return moyenne;
	}
}
